home *** CD-ROM | disk | FTP | other *** search
/ Freelog 115 / FreelogNo115-MaiJuin2013.iso / Internet / Filezilla Server / FileZilla_Server-0_9_41.exe / source / interface / OptionsSpeedLimitPage.cpp < prev    next >
C/C++ Source or Header  |  2011-11-06  |  12KB  |  389 lines

  1. // FileZilla Server - a Windows ftp server
  2.  
  3. // Copyright (C) 2002-2004 - Tim Kosse <tim.kosse@gmx.de>
  4.  
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9.  
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. // GNU General Public License for more details.
  14.  
  15. // You should have received a copy of the GNU General Public License
  16. // along with this program; if not, write to the Free Software
  17. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. // OptionsSpeedLimitPage.cpp: Implementierungsdatei
  20. //
  21.  
  22. #include "stdafx.h"
  23. #include "filezilla server.h"
  24. #include "OptionsDlg.h"
  25. #include "OptionsPage.h"
  26. #include "OptionsSpeedLimitPage.h"
  27. #include "SpeedLimitRuleDlg.h"
  28.  
  29. /////////////////////////////////////////////////////////////////////////////
  30. // COptionsSpeedLimitPage dialog
  31.  
  32.  
  33. COptionsSpeedLimitPage::COptionsSpeedLimitPage(COptionsDlg *pOptionsDlg) 
  34.     : COptionsPage(pOptionsDlg, IDD)
  35. {    
  36.     //{{AFX_DATA_INIT(COptionsSpeedLimitPage)
  37.     m_DownloadSpeedLimitType = -1;
  38.     m_UploadSpeedLimitType = -1;
  39.     m_DownloadValue = 10;
  40.     m_UploadValue = 10;
  41.     //}}AFX_DATA_INIT
  42. }
  43.  
  44. COptionsSpeedLimitPage::~COptionsSpeedLimitPage()
  45. {
  46. }
  47.  
  48. void COptionsSpeedLimitPage::DoDataExchange(CDataExchange* pDX)
  49. {
  50.     COptionsPage::DoDataExchange(pDX);
  51.     //{{AFX_DATA_MAP(COptionsSpeedLimitPage)
  52.     DDX_Control(pDX, IDC_SPEEDLIMIT_DOWNLOAD_UP, m_DownloadUpCtrl);
  53.     DDX_Control(pDX, IDC_SPEEDLIMIT_DOWNLOAD_RULES_LIST, m_DownloadRulesListCtrl);
  54.     DDX_Control(pDX, IDC_SPEEDLIMIT_DOWNLOAD_REMOVE, m_DownloadRemoveCtrl);
  55.     DDX_Control(pDX, IDC_SPEEDLIMIT_DOWNLOAD_DOWN, m_DownloadDownCtrl);
  56.     DDX_Control(pDX, IDC_SPEEDLIMIT_DOWNLOAD_ADD, m_DownloadAddCtrl);
  57.     DDX_Control(pDX, IDC_SPEEDLIMIT_UPLOAD_UP, m_UploadUpCtrl);
  58.     DDX_Control(pDX, IDC_SPEEDLIMIT_UPLOAD_RULES_LIST, m_UploadRulesListCtrl);
  59.     DDX_Control(pDX, IDC_SPEEDLIMIT_UPLOAD_REMOVE, m_UploadRemoveCtrl);
  60.     DDX_Control(pDX, IDC_SPEEDLIMIT_UPLOAD_DOWN, m_UploadDownCtrl);
  61.     DDX_Control(pDX, IDC_SPEEDLIMIT_UPLOAD_ADD, m_UploadAddCtrl);
  62.     DDX_Control(pDX, IDC_SPEEDLIMIT_UPLOAD_VALUE, m_UploadValueCtrl);
  63.     DDX_Control(pDX, IDC_SPEEDLIMIT_DOWNLOAD_VALUE, m_DownloadValueCtrl);
  64.     DDX_Radio(pDX, IDC_SPEEDLIMIT_DOWNLOAD1, m_DownloadSpeedLimitType);
  65.     DDX_Radio(pDX, IDC_SPEEDLIMIT_UPLOAD1, m_UploadSpeedLimitType);
  66.     DDX_Text(pDX, IDC_SPEEDLIMIT_DOWNLOAD_VALUE, m_DownloadValue);
  67.     DDV_MinMaxInt(pDX, m_DownloadValue, 1, 1000000000);
  68.     DDX_Text(pDX, IDC_SPEEDLIMIT_UPLOAD_VALUE, m_UploadValue);
  69.     DDV_MinMaxInt(pDX, m_UploadValue, 1, 1000000000);
  70.     //}}AFX_DATA_MAP
  71. }
  72.  
  73.  
  74. BEGIN_MESSAGE_MAP(COptionsSpeedLimitPage, COptionsPage)
  75.     //{{AFX_MSG_MAP(COptionsSpeedLimitPage)
  76.     ON_BN_CLICKED(IDC_SPEEDLIMIT_DOWNLOAD1, OnRadio)
  77.     ON_BN_CLICKED(IDC_SPEEDLIMIT_DOWNLOAD_ADD, OnSpeedlimitDownloadAdd)
  78.     ON_BN_CLICKED(IDC_SPEEDLIMIT_DOWNLOAD_REMOVE, OnSpeedlimitDownloadRemove)
  79.     ON_BN_CLICKED(IDC_SPEEDLIMIT_DOWNLOAD_UP, OnSpeedlimitDownloadUp)
  80.     ON_BN_CLICKED(IDC_SPEEDLIMIT_DOWNLOAD_DOWN, OnSpeedlimitDownloadDown)
  81.     ON_LBN_DBLCLK(IDC_SPEEDLIMIT_DOWNLOAD_RULES_LIST, OnDblclkSpeedlimitDownloadRulesList)
  82.     ON_BN_CLICKED(IDC_SPEEDLIMIT_UPLOAD_ADD, OnSpeedlimitUploadAdd)
  83.     ON_BN_CLICKED(IDC_SPEEDLIMIT_UPLOAD_REMOVE, OnSpeedlimitUploadRemove)
  84.     ON_BN_CLICKED(IDC_SPEEDLIMIT_UPLOAD_UP, OnSpeedlimitUploadUp)
  85.     ON_BN_CLICKED(IDC_SPEEDLIMIT_UPLOAD_DOWN, OnSpeedlimitUploadDown)
  86.     ON_BN_CLICKED(IDC_SPEEDLIMIT_UPLOAD1, OnRadio)
  87.     ON_BN_CLICKED(IDC_SPEEDLIMIT_DOWNLOAD2, OnRadio)
  88.     ON_BN_CLICKED(IDC_SPEEDLIMIT_UPLOAD2, OnRadio)
  89.     ON_BN_CLICKED(IDC_SPEEDLIMIT_DOWNLOAD3, OnRadio)
  90.     ON_BN_CLICKED(IDC_SPEEDLIMIT_UPLOAD3, OnRadio)
  91.     ON_BN_CLICKED(IDC_SPEEDLIMIT_DOWNLOAD4, OnRadio)
  92.     ON_BN_CLICKED(IDC_SPEEDLIMIT_UPLOAD4, OnRadio)
  93.     ON_LBN_DBLCLK(IDC_SPEEDLIMIT_UPLOAD_RULES_LIST, OnDblclkSpeedlimitUploadRulesList)
  94.     //}}AFX_MSG_MAP
  95. END_MESSAGE_MAP()
  96.  
  97. /////////////////////////////////////////////////////////////////////////////
  98. // COptionsSpeedLimitPage message handlers
  99.  
  100. void COptionsSpeedLimitPage::SetCtrlState()
  101. {
  102.     UpdateData(TRUE);
  103.  
  104.     ShowSpeedLimit(m_DownloadRulesListCtrl, m_DownloadSpeedLimits);
  105.     ShowSpeedLimit(m_UploadRulesListCtrl, m_UploadSpeedLimits);
  106.  
  107.     m_DownloadValueCtrl.EnableWindow(m_DownloadSpeedLimitType == 1);
  108.     m_DownloadUpCtrl.EnableWindow(m_DownloadSpeedLimitType == 2);
  109.     m_DownloadRulesListCtrl.EnableWindow(m_DownloadSpeedLimitType == 2);
  110.     m_DownloadRemoveCtrl.EnableWindow(m_DownloadSpeedLimitType == 2);
  111.     m_DownloadDownCtrl.EnableWindow(m_DownloadSpeedLimitType == 2);
  112.     m_DownloadAddCtrl.EnableWindow(m_DownloadSpeedLimitType == 2);
  113.         
  114.     m_UploadValueCtrl.EnableWindow(m_UploadSpeedLimitType == 1);
  115.     m_UploadUpCtrl.EnableWindow(m_UploadSpeedLimitType == 2);
  116.     m_UploadRulesListCtrl.EnableWindow(m_UploadSpeedLimitType == 2);
  117.     m_UploadRemoveCtrl.EnableWindow(m_UploadSpeedLimitType == 2);
  118.     m_UploadDownCtrl.EnableWindow(m_UploadSpeedLimitType == 2);
  119.     m_UploadAddCtrl.EnableWindow(m_UploadSpeedLimitType == 2);
  120. }
  121.  
  122. BOOL COptionsSpeedLimitPage::OnInitDialog() 
  123. {
  124.     COptionsPage::OnInitDialog();
  125.     
  126.     SetCtrlState();
  127.  
  128.     ShowSpeedLimit( m_DownloadRulesListCtrl, m_DownloadSpeedLimits);
  129.     ShowSpeedLimit( m_UploadRulesListCtrl, m_UploadSpeedLimits);
  130.  
  131.     return TRUE;  // return TRUE unless you set the focus to a control
  132.                   // EXCEPTION: OCX Property Pages should return FALSE
  133. }
  134.  
  135. void COptionsSpeedLimitPage::OnRadio() 
  136. {
  137.     SetCtrlState();
  138. }
  139.  
  140. void COptionsSpeedLimitPage::OnSpeedlimitDownloadAdd() 
  141. {
  142.     CSpeedLimitRuleDlg dlg;
  143.  
  144.     if ( dlg.DoModal() == IDOK)
  145.     {
  146.         m_DownloadSpeedLimits.push_back(dlg.GetSpeedLimit());
  147.  
  148.         ShowSpeedLimit( m_DownloadRulesListCtrl, m_DownloadSpeedLimits);
  149.     }
  150. }
  151.  
  152. void COptionsSpeedLimitPage::ShowSpeedLimit(CListBox &listBox, SPEEDLIMITSLIST &list)
  153. {
  154.     listBox.ResetContent();
  155.  
  156.     for (unsigned int i = 0; i < list.size(); i++)
  157.     {
  158.         CString str;
  159.         
  160.         str.Format(_T( "%dkB/s"), list[i].m_Speed);
  161.  
  162.         CString help;
  163.         
  164.         if (list[i].m_DateCheck)
  165.         {
  166.             CTime t(list[i].m_Date.y, list[i].m_Date.m, list[i].m_Date.d, 0, 0, 0);
  167.             help += t.Format(_T("%x"));
  168.         }
  169.         
  170.         if (list[i].m_FromCheck)
  171.         {
  172.             if (help.GetLength() > 0)
  173.                 help += _T( "; ");
  174.             
  175.             CTime t(2003, 1, 1, list[i].m_FromTime.h, list[i].m_FromTime.m, list[i].m_FromTime.s);
  176.             help += _T("F:") + t.Format( _T("%X"));
  177.         }
  178.         
  179.         if (list[i].m_ToCheck)
  180.         {
  181.             if (help.GetLength() > 0)
  182.                 help += _T( "; ");
  183.             
  184.             CTime t(2003, 1, 1, list[i].m_ToTime.h, list[i].m_ToTime.m, list[i].m_ToTime.s);
  185.             help += _T("T:") + t.Format( _T("%X"));
  186.         }
  187.         
  188.         for (int j = 0; j < 7; j++)
  189.             if (!(list[i].m_Day & (1<<j)))
  190.             {
  191.                 if (help.GetLength() > 0)
  192.                     help += _T( "; ");
  193.                 
  194.                 bool was = false;
  195.                 for ( int k = 0; k < 7; k++)
  196.                 {
  197.                     if ((list[i].m_Day & (1<<k)))
  198.                     {
  199.                         if (was)
  200.                             help += _T(", ");
  201.                         
  202.                         was = true;
  203.                         
  204.                         CTime time(2001, 1, k + 1, 0, 0, 0);
  205.                         
  206.                         help += time.Format(_T("%a"));
  207.                     }
  208.                 }
  209.                 
  210.                 break;
  211.             }
  212.         
  213.         str += _T(" [") + help + _T("]");
  214.         
  215.         listBox.AddString(str);
  216.     }
  217. }
  218.  
  219. void COptionsSpeedLimitPage::OnSpeedlimitDownloadRemove() 
  220. {
  221.     int curSel = m_DownloadRulesListCtrl.GetCurSel();
  222.  
  223.     if ( ( curSel >= 0) && ( curSel < (int)m_DownloadSpeedLimits.size()))
  224.     {
  225.         for (SPEEDLIMITSLIST::iterator iter=m_DownloadSpeedLimits.begin(); iter!=m_DownloadSpeedLimits.end(); iter++)
  226.         {
  227.             if (!curSel)
  228.             {
  229.                 m_DownloadSpeedLimits.erase(iter);
  230.                 break;
  231.             }
  232.             curSel--;
  233.         }
  234.  
  235.         ShowSpeedLimit( m_DownloadRulesListCtrl, m_DownloadSpeedLimits);
  236.     }
  237. }
  238.  
  239. void COptionsSpeedLimitPage::OnSpeedlimitDownloadUp() 
  240. {
  241.     int curSel = m_DownloadRulesListCtrl.GetCurSel();
  242.  
  243.     if ( ( curSel >= 1) && ( curSel < (int)m_DownloadSpeedLimits.size()))
  244.     {
  245.         CSpeedLimit sl = m_DownloadSpeedLimits[curSel];
  246.         m_DownloadSpeedLimits[curSel] = m_DownloadSpeedLimits[curSel - 1];
  247.         m_DownloadSpeedLimits[curSel - 1] = sl;
  248.  
  249.         ShowSpeedLimit( m_DownloadRulesListCtrl, m_DownloadSpeedLimits);
  250.  
  251.         m_DownloadRulesListCtrl.SetCurSel( curSel - 1);
  252.     }
  253. }
  254.  
  255. void COptionsSpeedLimitPage::OnSpeedlimitDownloadDown() 
  256. {
  257.     int curSel = m_DownloadRulesListCtrl.GetCurSel();
  258.  
  259.     if ( ( curSel >= 0) && ( curSel < (int)m_DownloadSpeedLimits.size() - 1))
  260.     {
  261.         CSpeedLimit sl = m_DownloadSpeedLimits[curSel];
  262.         m_DownloadSpeedLimits[curSel] = m_DownloadSpeedLimits[curSel + 1];
  263.         m_DownloadSpeedLimits[curSel + 1] = sl;
  264.  
  265.         ShowSpeedLimit( m_DownloadRulesListCtrl, m_DownloadSpeedLimits);
  266.  
  267.         m_DownloadRulesListCtrl.SetCurSel( curSel + 1);
  268.     }
  269. }
  270.  
  271. void COptionsSpeedLimitPage::OnDblclkSpeedlimitDownloadRulesList() 
  272. {
  273.     int curSel = m_DownloadRulesListCtrl.GetCurSel();
  274.  
  275.     if ( ( curSel >= 0) && ( curSel < (int)m_DownloadSpeedLimits.size()))
  276.     {
  277.         CSpeedLimitRuleDlg dlg;
  278.  
  279.         dlg.FillFromSpeedLimit(m_DownloadSpeedLimits[curSel]);
  280.  
  281.         if ( dlg.DoModal() == IDOK)
  282.         {
  283.             m_DownloadSpeedLimits[curSel] = dlg.GetSpeedLimit();
  284.  
  285.             ShowSpeedLimit(m_DownloadRulesListCtrl, m_DownloadSpeedLimits);
  286.             m_DownloadRulesListCtrl.SetCurSel(curSel);
  287.         }
  288.     }
  289. }
  290.  
  291. void COptionsSpeedLimitPage::OnSpeedlimitUploadRemove() 
  292. {
  293.     int curSel = m_UploadRulesListCtrl.GetCurSel();
  294.  
  295.     if ( ( curSel >= 0) && ( curSel < (int)m_UploadSpeedLimits.size()))
  296.     {
  297.         for (SPEEDLIMITSLIST::iterator iter=m_UploadSpeedLimits.begin(); iter!=m_UploadSpeedLimits.end(); iter++)
  298.         {
  299.             if (!curSel)
  300.             {
  301.                 m_UploadSpeedLimits.erase(iter);
  302.                 break;
  303.             }
  304.             curSel--;
  305.         }
  306.  
  307.         ShowSpeedLimit( m_UploadRulesListCtrl, m_UploadSpeedLimits);
  308.     }
  309. }
  310.  
  311. void COptionsSpeedLimitPage::OnSpeedlimitUploadUp() 
  312. {
  313.     int curSel = m_UploadRulesListCtrl.GetCurSel();
  314.  
  315.     if ( ( curSel >= 1) && ( curSel < (int)m_UploadSpeedLimits.size()))
  316.     {
  317.         CSpeedLimit sl = m_UploadSpeedLimits[curSel];
  318.         m_UploadSpeedLimits[curSel] = m_UploadSpeedLimits[curSel - 1];
  319.         m_UploadSpeedLimits[curSel - 1] = sl;
  320.  
  321.         ShowSpeedLimit( m_UploadRulesListCtrl, m_UploadSpeedLimits);
  322.  
  323.         m_UploadRulesListCtrl.SetCurSel( curSel - 1);
  324.     }
  325. }
  326.  
  327. void COptionsSpeedLimitPage::OnSpeedlimitUploadDown() 
  328. {
  329.     int curSel = m_UploadRulesListCtrl.GetCurSel();
  330.  
  331.     if ( ( curSel >= 0) && ( curSel < (int)m_UploadSpeedLimits.size() - 1))
  332.     {
  333.         CSpeedLimit sl = m_UploadSpeedLimits[curSel];
  334.         m_UploadSpeedLimits[curSel] = m_UploadSpeedLimits[curSel + 1];
  335.         m_UploadSpeedLimits[curSel + 1] = sl;
  336.  
  337.         ShowSpeedLimit( m_UploadRulesListCtrl, m_UploadSpeedLimits);
  338.  
  339.         m_UploadRulesListCtrl.SetCurSel( curSel + 1);
  340.     }
  341. }
  342.  
  343. void COptionsSpeedLimitPage::OnSpeedlimitUploadAdd() 
  344. {
  345.     CSpeedLimitRuleDlg dlg;
  346.  
  347.     if ( dlg.DoModal() == IDOK)
  348.     {
  349.         m_UploadSpeedLimits.push_back( dlg.GetSpeedLimit());
  350.  
  351.         ShowSpeedLimit( m_UploadRulesListCtrl, m_UploadSpeedLimits);
  352.     }
  353. }
  354.  
  355. void COptionsSpeedLimitPage::OnDblclkSpeedlimitUploadRulesList() 
  356. {
  357.     int curSel = m_UploadRulesListCtrl.GetCurSel();
  358.  
  359.     if ( ( curSel >= 0) && ( curSel < (int)m_UploadSpeedLimits.size()))
  360.     {
  361.         CSpeedLimitRuleDlg dlg;
  362.  
  363.         dlg.FillFromSpeedLimit( m_UploadSpeedLimits[curSel]);
  364.  
  365.         if (dlg.DoModal() == IDOK)
  366.         {
  367.             m_UploadSpeedLimits[curSel] = dlg.GetSpeedLimit();
  368.  
  369.             ShowSpeedLimit( m_UploadRulesListCtrl, m_UploadSpeedLimits);
  370.             m_UploadRulesListCtrl.SetCurSel( curSel);
  371.         }
  372.     }
  373. }
  374.  
  375. void COptionsSpeedLimitPage::LoadData()
  376. {
  377.     m_DownloadSpeedLimitType = (int)m_pOptionsDlg->GetOptionVal(OPTION_DOWNLOADSPEEDLIMITTYPE);
  378.     m_UploadSpeedLimitType = (int)m_pOptionsDlg->GetOptionVal(OPTION_UPLOADSPEEDLIMITTYPE);
  379.     m_DownloadValue = (int)m_pOptionsDlg->GetOptionVal(OPTION_DOWNLOADSPEEDLIMIT);
  380.     m_UploadValue = (int)m_pOptionsDlg->GetOptionVal(OPTION_UPLOADSPEEDLIMIT);
  381. }
  382.  
  383. void COptionsSpeedLimitPage::SaveData()
  384. {
  385.     m_pOptionsDlg->SetOption(OPTION_DOWNLOADSPEEDLIMITTYPE, m_DownloadSpeedLimitType);
  386.     m_pOptionsDlg->SetOption(OPTION_DOWNLOADSPEEDLIMIT, m_DownloadValue);
  387.     m_pOptionsDlg->SetOption(OPTION_UPLOADSPEEDLIMITTYPE, m_UploadSpeedLimitType);
  388.     m_pOptionsDlg->SetOption(OPTION_UPLOADSPEEDLIMIT, m_UploadValue);
  389. }